﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucThongkekhoahoc : System.Web.UI.UserControl
{
    private List<DangkykhoahocEntity> glbLstGrvDatasource = null;
    private List<Khoahoc_HocvienEntity> glbLstKhoahocHocvien = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            napDdlKhoahoc();
            napDulieu(true);
        }
    }
    /// <summary>
    /// Nạp GridView slide
    /// </summary>
    /// <author>liemqv</author>
    /// <create>30/04/2012</create>
    /// <param name="bLoadFromDB">Cho biết có cập nhật lại danh sách từ Database hay không</param>
    /// 
    public void napDulieu(bool bLoadFromDB)
    {
        Int64 PK_iKhoahocID = 0;
        if (bLoadFromDB == true || Cache["cacheLstKhoahocHocvien"] == null)
        {
            PK_iKhoahocID = iGetPK_iKhoahocID();
            glbLstKhoahocHocvien = Khoahoc_HocvienBRL.GetByFK_iKhoahocID(PK_iKhoahocID);
            Cache["cacheLstKhoahocHocvien"] = glbLstKhoahocHocvien;
        }
        glbLstKhoahocHocvien = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
        if(Session["PK_iKhoahocID"] == null)
        {
            Session["PK_iKhoahocID"] = ddlKhoahoc.SelectedValue;
        }
        PK_iKhoahocID = Int64.Parse(Session["PK_iKhoahocID"].ToString());
        ddlKhoahoc.Items.FindByValue(PK_iKhoahocID.ToString()).Selected = true;

        grvHocvientrongkhoahoc.DataSource = glbLstKhoahocHocvien;
        grvHocvientrongkhoahoc.DataKeyNames = new string[] { "PK_iKhoahoc_HocvienID" };
        grvHocvientrongkhoahoc.DataBind();
    }

    /// <summary>
    /// Nạp ddlKhoahoc
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    ///
    public void napDdlKhoahoc()
    {
        List<KhoahocEntity> lstKhoahoc = KhoahocBRL.GetAll();
        ddlKhoahoc.DataSource = lstKhoahoc;
        ddlKhoahoc.DataTextField = "sTenkhoahoc";
        ddlKhoahoc.DataValueField = "PK_iKhoahocID";
        ddlKhoahoc.DataBind();
    }

    /// <summary>
    /// Lấy ID của khóa học được chọn
    /// </summary>
    /// <author>liemqv</author>
    /// <create>01/05/2012</create>
    ///
    public Int64 iGetPK_iKhoahocID()
    {
        Int64 iRes = 0;
        try
        {
            if (Session["PK_iKhoahocID"] != null)
            {
                iRes = Int64.Parse(Session["PK_iKhoahocID"].ToString());
            }
            else
            {
                iRes = Int64.Parse(ddlKhoahoc.SelectedValue);
            }
        }
        catch (Exception ex)
        {
        }
        return iRes;
    }
    /// <summary>
    /// Lấy ID người dùng đăng nhập
    /// </summary>
    /// <author>liemqv</author>
    /// <create>25/04/2012</create>
    /// 
    public Int64 iGetUserLogin()
    {
        Int64 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int64.Parse(Session["UserID"].ToString());
            }
            else
            {
                Response.Redirect("~/Admin/Login.aspx?re=Admin/?page=Thongkekhoahoc");
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    protected void grvHocviendangky_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<DangkykhoahocEntity> lstShort = (List<DangkykhoahocEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = DangkykhoahocEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napDulieu(false);
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        napDulieu(false);
        divThongbao.InnerHtml = "";
    }
   
    protected void grvHocvientrongkhoahoc_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvHocvientrongkhoahoc.PageIndex = e.NewPageIndex;
        napDulieu(false);
    }
    protected void grvHocvientrongkhoahoc_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        Int64 PK_iKhoahoc_HocvienID;
        int iIndex;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grvHocvientrongkhoahoc.Rows[iIndex];
        String str = grvHocvientrongkhoahoc.DataKeys[row.RowIndex].Values["PK_iKhoahoc_HocvienID"].ToString();
        PK_iKhoahoc_HocvienID = Convert.ToInt64(grvHocvientrongkhoahoc.DataKeys[row.RowIndex].Values["PK_iKhoahoc_HocvienID"]);
        if (e.CommandName == "Xoa")
        {
            /*
                * Thực hiện tác vụ xóa
                * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                * Nhưng không phải load lại từ database để hiển thị
                */
            Khoahoc_HocvienBRL.Remove(PK_iKhoahoc_HocvienID);
            glbLstKhoahocHocvien = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
            Khoahoc_HocvienEntity oKhoahocHocvienDelete = glbLstKhoahocHocvien.Find
            (
                delegate(Khoahoc_HocvienEntity oKhoahocHocvien)
                {
                    return oKhoahocHocvien.PK_iKhoahoc_HocvienID == PK_iKhoahoc_HocvienID;
                }
            );
            if (oKhoahocHocvienDelete != null)
            {
                glbLstKhoahocHocvien.Remove(oKhoahocHocvienDelete); //Xóa trong danh sách
            }
            napDulieu(false);
            divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa đăng ký thành công!</span></p>";
        }
        else
            if (e.CommandName == "Capnhat")
            {
                btnOK.CommandArgument = PK_iKhoahoc_HocvienID.ToString();
                btnOK.Text = "<span>Cập nhật</span>";
                Khoahoc_HocvienEntity oKhoahocHocvien = Khoahoc_HocvienBRL.GetOne(PK_iKhoahoc_HocvienID);
                txtGhichu.Text = oKhoahocHocvien.sGhichu;
                ddlTacvu.SelectedItem.Selected = false;
                ddlTacvu.Items.FindByValue(oKhoahocHocvien.iTrangthai.ToString()).Selected = true;
                panEdit.Visible = true;
            }
    }
    protected void grvHocvientrongkhoahoc_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        List<Khoahoc_HocvienEntity> lstShort = (List<Khoahoc_HocvienEntity>)Cache["cacheLstKhoahocHocvien"];
        glbLstKhoahocHocvien = Khoahoc_HocvienEntity.Sort(lstShort, e.SortExpression, ViewState["SortDirection"].ToString());
        napDulieu(false);
    }
    protected void grvHocvientrongkhoahoc_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        Label lblHoten = null;
        Label lblNgaysinh = null;
        Label lblTrangthai = null;
        HyperLink hplHoten = null;
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            lblHoten = (Label)e.Row.FindControl("lblHoten");
            lblNgaysinh = (Label)e.Row.FindControl("lblNgaysinh");
            lblTrangthai = (Label)e.Row.FindControl("lblTrangthai");
            hplHoten = (HyperLink)e.Row.FindControl("hplHoten");
            if (lblNgaysinh != null && hplHoten != null)
            {
                Int64 PK_iNguoidungID = Int64.Parse(lblNgaysinh.Text);
                NguoidungEntity oHocvien = NguoidungBRL.GetOne(PK_iNguoidungID);
                //lblHoten.Text = oHocvien.sHoten;
                lblNgaysinh.Text = oHocvien.dNgaysinh.ToString("dd/MM/yyyy");
                hplHoten.Text = oHocvien.sHoten;
            }
            if(lblTrangthai != null)
            {
                short iTrangthai = short.Parse(lblTrangthai.Text);
                if(iTrangthai == 0)
                {
                    lblTrangthai.Text = "Đình chỉ học";
                    lblTrangthai.ForeColor = System.Drawing.Color.Red;
                }
                else
                    if(iTrangthai == 1)
                    {
                        lblTrangthai.Text = "Cảnh báo";
                        lblTrangthai.ForeColor = System.Drawing.Color.Orange;
                    }
                else
                    if (iTrangthai == 2)
                    {
                        lblTrangthai.Text = "Bình thường";
                        lblTrangthai.ForeColor = System.Drawing.Color.Green;
                    }
            }
        }
    }
    
    protected void ddlKhoahoc_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["PK_iKhoahocID"] = ddlKhoahoc.SelectedValue;
        napDulieu(true);
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        Khoahoc_HocvienEntity oKhoahocHocvien = new Khoahoc_HocvienEntity();
        Int64 PK_iKhoahocHocvienID = Int64.Parse(btnOK.CommandArgument);
        short iTrangthaimoi = short.Parse(ddlTacvu.SelectedValue);
        oKhoahocHocvien = Khoahoc_HocvienBRL.GetOne(PK_iKhoahocHocvienID);
        if (oKhoahocHocvien.iTrangthai == iTrangthaimoi)
        {
            panEdit.Visible = false;
            return;
        }
        oKhoahocHocvien.iTrangthai = iTrangthaimoi;
        oKhoahocHocvien.sGhichu = txtGhichu.Text;
        Khoahoc_HocvienBRL.Edit(oKhoahocHocvien); //Cập nhật trạng thái trong khóa học của học viên
        //Tạo thông báo tới học viên về thay đổi trạng thái này
        NguoidungEntity oNguoidung = NguoidungBRL.GetOne(iGetUserLogin());
        KhoahocEntity oKhoahoc = KhoahocBRL.GetOne(oKhoahocHocvien.FK_iKhoahocID);
        ThongbaoEntity oThongbao = new ThongbaoEntity();
        String sTrangthai = "";
        switch(oKhoahocHocvien.iTrangthai)
        {
            case 0:
                sTrangthai = "đình chỉ học";
                break;
            case 1:
                sTrangthai = "cảnh báo";
                break;
            case 2:
                sTrangthai = "bình  thường";
                break;
        }
        //Tạo thông báo
        oThongbao.sTieude = oNguoidung.sHoten + " đã cập nhật trạng thái của bạn trong khóa học " + oKhoahoc.sTenkhoahoc + " thành \"" + sTrangthai + "\"";
        oThongbao.sNoidung = oKhoahocHocvien.sGhichu;
        oThongbao.FK_iNguoidangthongbaoID = iGetUserLogin();
        Int64 PK_iThongbaoID = ThongbaoBRL.Add(oThongbao);
        //Gửi thông báo tới học viên tương ứng
        Thongbao_NguoidungEntity oThongbaoNguoidung = new Thongbao_NguoidungEntity();
        oThongbaoNguoidung.FK_iNguoidungID = oKhoahocHocvien.FK_iHocvienID;
        oThongbaoNguoidung.FK_iThongbaoID = PK_iThongbaoID;
        oThongbaoNguoidung.iTrangthai = 1;
        Thongbao_NguoidungBRL.Add(oThongbaoNguoidung);
        //
        panEdit.Visible = false;
        napDulieu(true);
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        txtGhichu.Text = "";
        panEdit.Visible = false;
    }
}